package main

import (
	"fmt"
	"sync"
)

//定义一个变量
var total int
var wg sync.WaitGroup
//加入互斥锁
var lock sync.Mutex

func add(){
	defer wg.Done()
	for i := 1; i <= 100000; i++{
		//加锁：
		lock.Lock()
		total = total + 1
		//解锁：
		lock.Unlock()
	}
}

func sub(){
	defer wg.Done()
	for i := 1; i <= 100000; i++{
		//加锁：
		lock.Lock()
		total = total - 1
		//解锁：
		lock.Unlock()
	}
}

func main(){
	wg.Add(2)
	go add()
	go sub()

	wg.Wait()
	//理论上，这个total结果应该是0，无论怎么交替执行，最终想象结果就是0，但是事实上：不是
	//问题出现的原因：
	fmt.Println(total)
}